 <?php
 header('content-type:text/html;charset=utf-8');
 echo '<h2>接收到的新用户注册</h2>';
 echo '<p> 用户名：'.$_POST['username'].'</p>';
 echo '<p> 密码：'.$_POST['password'].'</p>';
 echo '<p> 邮箱：'.$_POST['email'].'</p>';
 echo '<p> IP地址：'.$_SERVER['REMOTE_ADDR'].'</p>';
 echo '<p> 浏览器环境：'.$_SERVER['HTTP_USER_AGENT'].'</p>';
 echo '<p> 请求来源：'.$_SERVER['HTTP_REFERER'].'</p>';
 $username=$_POST['username'];
 $password=$_POST['password'];
 $email=$_POST['email'];
 //连接数据库
 $link =mysqli_connect('localhost','root','','user');
 if(!$link){
  die ('连接数据库失败！'.mysqli_error($link));
 }
 //设置字符集，选择数据库
 mysqli_query($link,'set names utf8');
 mysqli_query($link,'use user');
 //连接数据库；

 
 //过滤用户数据输入，防止SQL注入；
 $username=mysqli_real_escape_string( $link,$username);
 $email=mysqli_real_escape_string($link,$email);
 //判断用户名是否已经存在；
 $sql="select `id` from `user` where `username`='$username'";
 $rst=mysqli_query($link,$sql);
 if(mysqli_fetch_row($rst)){
  //用户名存在，不允许注册，程序停止
  die('用户名已经存在，请换一个用户名。');
 }
 //用户名不存在，可以注册；
 //使用MD5增强密码的安全性；
 //$password=md5($password);
 //生成盐密码
 $salt=md5(uniqid(microtime()));
 $password=md5($salt.md5($password));
 $sql="insert into `user`(`username`,`password`,`salt`,`email`) values ('$username','$password','$salt','$email')";
 $rst=mysqli_query($link,$sql);
 //引入表单验证函数库；
 require 'check_form.lib.php';
 //假设PHP程序收到了用户表注册表单，用￥data数组模拟用户输入数据；
 $data=array(
     'username'=>'小明',
     'password'=>'123456',
     'email'=>'xiaoming@123.com',
 );
 //为每个字段定义不同的验证函数；
 $validate=array(
  //表单名=>验证函数名；
     'username'=>'checkUsername',
     'password'=>'checkPassword',
     'email'=>'checkEmail',
 );
 //$error数组保存验证后的错误信息；
 $error=array();
 //循环验证每个字段，保存错误信息
 foreach ($validate as $k=>$v){
  //运用可变函数，实现不同字段调用不同函数；
  $result=$v($data[$k]);
  if($result!==true){
   //result不为ture说明表单验证失败；
   $error[]=$result;//保存错误信息；
  }
 }
 if(!empty($error)){
  //表单验证有错误；
 }else{
  //表单验证失败，显示错误信息；
  require 'register_error_html.php';
 }
 
 ?>